package com.tbit.uqbike.client.dao.core;

import com.tbit.uqbike.client.pojo.Machine;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 设备dao
 *
 * @author Leon
 * 2017年2月24日 下午4:02:36
 */
public interface MachineDao {

    /**
     * 根据设备编号查询
     *
     * @param machineNO
     * @return
     */
    Machine getByMachineNO(String machineNO);

    /**
     * 根据设备id查询
     *
     * @param machineId
     * @return
     */
    Machine getByMachineId(Integer machineId);

    /**
     * 根据设备编号批量查询
     *
     * @param params
     * @return
     */
    List<Machine> getByMachineNOs(Map<String, Object> params);

    /**
     * 查询空闲车辆
     *
     * @param params
     * @return
     */
    List<Machine> getFreeByMachineNOs(Map<String, Object> params);

    /**
     * 查询空闲车辆
     *
     * @param params
     * @return
     */
    List<Machine> getFreeByMachineNOsAndAccountId(Map<String, Object> params);

    /**
     * 根据设备id批量查询
     *
     * @param params
     * @return
     */
    List<Machine> getByMachineIds(Map<String, Object> params);

    /**
     * 查询可借设备
     *
     * @param params
     * @return
     */
    List<Machine> getCanBorrow(Map<String, Object> params);

    /**
     * 更新最后状态
     *
     * @param params
     */
    void updateLastStatus(Map<String, Object> params);

    void updateReturnTime(@Param("machineId")Integer machineId);

    Integer findBrandId(String machineNO);

    /**
     * 通过用户码获取
     */
    Machine getByUserCode(String userCode);

    /**
     * 获取所有设备
     *
     * @return
     */
    List<Machine> getAll();

    Machine getByLicense(String license);

    /**
     * 检查运营区下是否有自行车
     * @param accountId 运营区ID
     * @return 只查询一条记录，检查是否存在
     */
    Machine checkIfExistBike(Integer accountId);
}